package com.mlan.userap.untils;

import android.content.Context;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import com.mlan.userap.MyAPP;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.lang.reflect.Type;

public class ConfigManager {

    private static final String CONFIG_DIR = "data";

    private ConfigManager() {
        // 私有构造方法，防止实例化
    }

    /**
     * 保存泛型数据到配置文件
     * @param context 上下文
     * @param data 要保存的数据
     * @param <T> 数据类型
     */
    public static <T> void save(String fileName, T data) {
        Context context = MyAPP.getContext();
        File dir = context.getDir(CONFIG_DIR, Context.MODE_PRIVATE);
        File file = new File(dir, fileName);

        try (FileOutputStream fos = new FileOutputStream(file)) {
            Gson gson = new Gson();
            String json = gson.toJson(data);
            fos.write(json.getBytes());
            fos.flush();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public static void saveString(String fileName, String data) {
        Context context = MyAPP.getContext();
        File dir = context.getDir(CONFIG_DIR, Context.MODE_PRIVATE);
        File file = new File(dir, fileName);

        try (FileOutputStream fos = new FileOutputStream(file)) {

            fos.write(data.getBytes());
            fos.flush();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    /**
     * 加载泛型数据从配置文件
     * @param context 上下文
     * @param clazz 数据类型
     * @param defaultValue 默认值（如果文件不存在或解析失败）
     * @param <T> 数据类型
     * @return 加载的数据或默认值
     */
    public static <T> T load(String fileName, Class<T> clazz, T defaultValue) {
        Context context = MyAPP.getContext();
        File dir = context.getDir(CONFIG_DIR, Context.MODE_PRIVATE);
        File file = new File(dir, fileName);

        if (!file.exists()) {
            return defaultValue;
        }

        try (FileInputStream fis = new FileInputStream(file)) {
            byte[] buffer = new byte[(int) file.length()];
            fis.read(buffer);
            String json = new String(buffer);
            Gson gson = new Gson();
            return gson.fromJson(json, clazz);
        } catch (IOException e) {
            e.printStackTrace();
            return defaultValue;
        }
    }

    /**
     * 加载泛型数据从配置文件（支持复杂类型）
     * @param context 上下文
     * @param type 数据类型（例如 TypeToken.getParameterized(List.class, String.class).getType()）
     * @param defaultValue 默认值（如果文件不存在或解析失败）
     * @param <T> 数据类型
     * @return 加载的数据或默认值
     */
    public static <T> T load(String fileName, Type type, T defaultValue) {
        Context context = MyAPP.getContext();
        File dir = context.getDir(CONFIG_DIR, Context.MODE_PRIVATE);
        File file = new File(dir, fileName);

        if (!file.exists()) {
            return defaultValue;
        }

        try (FileInputStream fis = new FileInputStream(file)) {
            byte[] buffer = new byte[(int) file.length()];
            fis.read(buffer);
            String json = new String(buffer);
            Gson gson = new Gson();
            return gson.fromJson(json, type);
        } catch (IOException e) {
            e.printStackTrace();
            return defaultValue;
        }
    }

    public static String loadStr(String fileName) {
        String rtn="";
        Context context = MyAPP.getContext();
        File dir = context.getDir(CONFIG_DIR, Context.MODE_PRIVATE);
        File file = new File(dir, fileName);

        if (file.exists()) {
            try (FileInputStream fis = new FileInputStream(file)) {
                byte[] buffer = new byte[(int) file.length()];
                fis.read(buffer);
                rtn = new String(buffer);
            } catch (IOException e) {

            }
        }
        return rtn;
    }
}